/*
* TFControllerInterface.h
*
* This class controls the flow of the game. It listens
* for input from the screen/controller, then updates
* the game state model depending on what state it is going
* to and from. The controller uses the view to determine
* what objects to act upon and when to redraw.
*
* Author: Rapid Dojo
* Date: Oct 19, 2007
*/


#ifndef TFControllerInterface_H
#define TFControllerInterface_H

#include "TFConstants.h"
#include "TFModelInterface.h"
#include "TFViewInterface.h"
#include "TFAIInterface.h"

class TFControllerInterface
{
public:

	/*
	* This method is responsible for handling
	* the splash screen introduction loop before 
	* entering the main game loop.
	*/
	virtual HRESULT DoSplashIntro(){return E_FAIL;}

	/*
	* This is "core" method responsible for
	* controlling the flow of the game.
	* It listens for user interactions (from touch or controller),
	* then makes a change to the model and tells the view to redraw.
	*
	* Initial state is set to TF_GAME_MODE = 
	*/
	virtual HRESULT ListenAndProcess(){return E_FAIL;}
    
    virtual bool StartOrTouchPressed(){return false;}
    
	virtual void SetModel(TFModelInterface * iTFModel){_model = iTFModel;}
	virtual void SetView(TFViewInterface * iTFView){_view = iTFView;}
	virtual void SetAI(TFAIInterface * iAI){_ai = iAI;}

	virtual ~TFControllerInterface() {}

protected:

TFModelInterface * _model;
TFViewInterface * _view;
TFAIInterface *_ai;

};

#endif
